/* TypeCompare.h
 * 
 *  Author          : Alexander J. Yee
 *  Date Created    : 11/20/2014
 *  Last Modified   : 04/08/2017
 * 
 */

#pragma once
#ifndef ymp_TemplateTools_TypeCompare_H
#define ymp_TemplateTools_TypeCompare_H
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#include "PublicLibs/CompilerSettings.h"
namespace ymp{
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//  Type ID without RTTI  (Be careful, this is technically undefined behavior.)
//  Note that this requires both types to be polymorphic and have a vtable.
template <typename typeA, typename typeB> YM_FORCE_INLINE
bool is_same_type(const typeA& A, const typeB& B){
//    return typeid(a) == typeid(b);
    return *(void**)&A == *(void**)&B;
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
}
#endif
